import 'dart:io';

import 'package:aio/aio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:app/generated/app_strings.dart';
import 'package:app/src/http/bean/http_data.dart';
import 'package:app/src/http/model/submit_model.dart';
import 'package:app/src/http/url.dart';
import 'package:app/src/manager/file_manager.dart';
import 'package:app/src/ui/dialog/dailog.dart';
import 'package:app/src/ui/route/helper/route_helper.dart';

import '../../../../manager/audit_manager.dart';

///审核提交,开票审核，导出单据
class ReviewSubmittedWithExportStateful extends StatefulWidget {
  //提交之前回调,用于提交参数SubData赋值。
  ResponseCallbackWithT<SubData>? _callbackWithT = null;

  ReviewSubmittedStateful(
      {bool hasEnd = true,
      ResponseCallbackWithT<SubData>? callbackWithT = null}) {
    this._callbackWithT = callbackWithT;
  }

  @override
  _State createState() => _State();
}

class _State extends State<ReviewSubmittedWithExportStateful> {
  _Presenter presenter = _Presenter();

  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    AuditManager.getAuditManager().setDetailsWithAuto(
        false, "review_submitted_export.dart"); //fixme 不在审核详情页面。
  }

  @override
  Widget build(BuildContext context) {
    // AuditManager.setDetailsWithAuto(
    //     true, "review_submitted_export.dart"); //fixme 当前在审核详情页面。现在需求任然需要显示通知信息。。
    return _body(context);
  }

  Widget _body(BuildContext context) {
    return StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
      presenter.setStateBody = setState;
      List<Widget> children = [];
      var topMargin = 16.0;
      //选择状态
      children.add(_auditState(context));
      //导出单据
      var submitName = AppStrings.of(context).ExportDocuments;
      var SubmitAudit = MaterialButton(
        onPressed: () {
          presenter?.exportDocuments(context, widget._callbackWithT);
        },
        color: ColorUtils.parseColor("#5985F0"),
        textColor: Colors.white,
        padding: EdgeInsets.all(15),
        elevation: 0,
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.only(
                topLeft: Radius.circular(8), bottomLeft: Radius.circular(8))),
        child: Text(submitName),
      );
      //返回列表
      var ReturnsList = MaterialButton(
        onPressed: () {
          AppRouteHelper.pop(context);
        },
        color: ColorUtils.parseColor("#8F97AC"),
        textColor: Colors.white,
        padding: EdgeInsets.all(15),
        elevation: 0,
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.only(
                topRight: Radius.circular(8), bottomRight: Radius.circular(8))),
        child: Text(AppStrings.of(context).ReturnsList),
      );
      var row = Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [Expanded(child: SubmitAudit), Expanded(child: ReturnsList)],
      );
      children.add(row);
      return Container(
        padding: EdgeInsets.only(left: 8, right: 8, top: topMargin, bottom: 16),
        child: Column(
          children: children,
        ),
        decoration: BoxDecoration(
          color: Colors.white,
          boxShadow: [
            BoxShadow(
                color: Colors.black, blurRadius: 10, offset: Offset(0, 10))
          ],
        ),
      );
    });
  }

  ///审核状态选择
  Widget _auditState(BuildContext context) {
    return StatefulBuilder(builder: (context, setState) {
      List<Widget> children = [];
      //NC
      var agree = Radio(
        value: _type_nc,
        //value 单选框的值;是泛型
        groupValue: presenter._type,
        //groupValue 选中的值，如果 value 和 groupValue 相等。就是选中状态。
        toggleable: true,
        //toggleable: true 即可以选中，也可以取消；false（默认） 点击时只能选中，不能取消。只能点击其他控件取消。
        onChanged: (value) {
          //点击时状态改变时回调。
          //print('value:$value'); //返回的就是点击的 value 的值。
          setState(() {
            presenter._type = value.toString();
          });
        },
        activeColor: Colors.blueAccent,
      );
      children.add(agree);
      children.add(Text("$_type_nc  "));
      //金税
      var back = Radio(
        value: _type_jr,
        //value 单选框的值;是泛型
        groupValue: presenter._type,
        //groupValue 选中的值，如果 value 和 groupValue 相等。就是选中状态。
        toggleable: true,
        //toggleable: true 即可以选中，也可以取消；false（默认） 点击时只能选中，不能取消。只能点击其他控件取消。
        onChanged: (value) {
          //点击时状态改变时回调。
          //print('value:$value'); //返回的就是点击的 value 的值。
          setState(() {
            presenter._type = value.toString();
          });
        },
        activeColor: Colors.blueAccent,
      );
      children.add(back);
      children.add(Text("$_type_jr  "));
      // //形式发票（海外）
      // var haiwai = Radio(
      //   value: _type_xinshi_haiwai,
      //   //value 单选框的值;是泛型
      //   groupValue: presenter._type,
      //   //groupValue 选中的值，如果 value 和 groupValue 相等。就是选中状态。
      //   toggleable: true,
      //   //toggleable: true 即可以选中，也可以取消；false（默认） 点击时只能选中，不能取消。只能点击其他控件取消。
      //   onChanged: (value) {
      //     //点击时状态改变时回调。
      //     print('value:$value'); //返回的就是点击的 value 的值。
      //     setState(() {
      //       presenter._type = value.toString();
      //     });
      //   },
      //   activeColor: Colors.blueAccent,
      // );
      // children.add(haiwai);
      // children.add(Text("$_type_xinshi_haiwai  "));
      var row = Row(
        children: children,
      );
      return Container(
        child: row,
        margin: EdgeInsets.only(top: 10, bottom: 0),
      );
    });
  }
}

final String _type_nc = "NC";
final String _type_jr = "金税";
// final String _type_xinshi_haiwai = "形式发票(海外)";//接口不支持

class _Presenter {
  ///body视图状态
  StateSetter? setStateBody;

  TextEditingController? textEditingController = null;

  //导出单据类型
  var _type = _type_nc;

  //提交数据
  SubData? _subData = null;

  ///导出单据
  exportDocuments(
      BuildContext context, ResponseCallbackWithT<SubData>? _callbackWithT) {
    AuditManager.getAuditManager().setDetailsWithAuto(true,
        "review_submitted_export.dart"); //fixme 在审核详情页面,正在提交的时候，不要显示通知信息。没有提交的时候，还是要显示的。
    FileManager.delAll(); //fixme 删除之前的文件
    if (_subData == null) {
      _subData = SubData();
    }
    _callbackWithT?.call(_subData!); //fixme 提交之前回调，用于提交参数赋值。
    //导出的单据文件是实时生产的，每次都不一样。
    SubmitModel.exportDocuments(context, true, _type, subData: _subData)
        ?.then((value) {
      if (value.isSuccessForCode()) {
        if (value.MsgDetail != null && value.MsgDetail!.length > 0) {
          Toast.showSuccess(value?.MsgDetail, context); //fixme 优先提示服务器提示信息。
        } else {
          Toast.showSuccess(
              AppStrings.of(context).ExportDocumentsSuccess, context); //导出单据成功
        }
        var url = value.Data?.replaceAll("~", Url.baseurl()); //文档地址
        //print("文档地址：$url");
        FileUtils.openFile(context, url, response: (value) {
          FileManager.addFile(value);
          AuditManager.getAuditManager().setDetailsWithAuto(false,
              "review_submitted_export.dart"); //fixme 审核详情页面提交结束，可以显示通知信息。
        }); //打开文件
      } else {
        //提示错误信息
        AppDialog.showDialogWithInfo(context, content: value.MsgDetail);
        AuditManager.getAuditManager().setDetailsWithAuto(
            false, "review_submitted_export.dart"); //fixme 审核详情页面提交结束，可以显示通知信息。
      }
    });
  }
}
